﻿using System;

namespace _012_实数四舍五入错误
{
    class Program
    {
        static void Main(string[] args)
        {
            // float和double在内部是基于2来表示数值的。
            float tenth = 0.1f; // 并不是0.1
            float one = 1f;
            Console.WriteLine((one - tenth * 10f)); // -1.490116E-08

            // decimal基于10，它能够精确地表示基于10的数值
            // double和decimal都不能精确表示那些基于10的极小数
            decimal m = 1M / 6M;
            Console.WriteLine(m); // 0.1666666666666666666666666667M
            double d = 1.0 / 6.0;
            Console.WriteLine(d); // 0.166666666666667

            decimal NotQuiteWholeM = m + m + m + m + m + m;
            Console.WriteLine(NotQuiteWholeM); // 1.0000000000000000000000000002M
            double NotQuiteWholeD = d + d + d + d + d + d;
            Console.WriteLine(NotQuiteWholeD); // 0.99999999999999989 // 我运行的结果是：1

            Console.WriteLine(NotQuiteWholeM == 1M); // False
            Console.WriteLine(NotQuiteWholeD < 1.0); // True
            Console.ReadKey();
        }
    }
}